# -*- coding: utf-8 -*-
# @Author  : longbhu
# @Time    : 2025/4/21 17:00
# @Function:
import rasterio
import numpy as np
import pandas as pd
import re

from calc_v1.tif_tools.para import eco_codes


def count_unique_values_and_fill_excel(tif_file_path: str, output_excel: str) -> None:
    """
    根据固定统计表中的 eco_code 列表，统计 TIFF 文件中每个 eco_code 的出现次数，
    并将结果填入对应的 value 列。如果某个 eco_code 不存在，则填入 0。
    value 列的列名根据 TIFF 文件名提取的 6 位数字命名。

    参数:
    tif_file_path (str): TIFF 文件的路径。
    excel_file_path (str): 固定统计表的 Excel 文件路径。
    output_excel (str): 输出的 Excel 文件路径。

    返回:
    None
    """
    # 使用正则表达式从文件名中提取 6 位数字
    match = re.search(r'\d{6}', tif_file_path)
    if match:
        value_column_name = f"{match.group()}"
    else:
        raise ValueError("TIFF 文件名中未找到 6 位数字")

    # 读取 TIFF 文件的数据
    with rasterio.open(tif_file_path, 'r') as src:
        data = src.read(1)  # 假设数据在第一个波段
        print(data.shape)

    # 读取固定统计表
    # fixed_df = pd.read_excel(excel_file_path)
    # print(fixed_df)

    # 直接在代码中定义固定统计表的数据
    fixed_df = pd.DataFrame({'eco_code': eco_codes})


    # 统计 TIFF 数据中的唯一值及其数量
    unique_values, counts = np.unique(data, return_counts=True)
    value_counts = dict(zip(unique_values, counts))

    # 遍历固定统计表中的 eco_code，填入对应的 value
    fixed_df[value_column_name] = fixed_df['eco_code'].apply(lambda x: value_counts.get(x, 0))

    # 保存到新的 Excel 文件
    # fixed_df.to_excel(output_excel, index=False)

    print(f"统计结果已保存到 {output_excel}")

# 示例调用
tif_file_path = r'G:\test\生态图分布情况统计\china_110000.tif'
output_excel = r'G:\test\生态图分布情况统计\统计结果.xlsx'

count_unique_values_and_fill_excel(tif_file_path, output_excel)